/**
 * 为 Ant Design 的全局静态方法（如 message、Modal.xxx、notification.xxx）提供统一的初始化和导出方式，方便在项目的任意位置调用这些全局提示、弹窗等功能。
 *
 */
import { App } from 'antd';
import type { MessageInstance } from 'antd/es/message/interface';
import type { ModalStaticFunctions } from 'antd/es/modal/confirm';
import type { NotificationInstance } from 'antd/es/notification/interface';

//  声明变量：Ant Design 的全局消息、通知和模态框方法
let message: MessageInstance;
let notification: NotificationInstance;
let modal: Omit<ModalStaticFunctions, 'warn'>;

/**
 * AntdGlobal 组件
 * @returns AntdGlobal 组件
 *
 * 该组件主要用于初始化 Ant Design 的全局静态方法（message、notification、modal），
 * 使得在项目的其他地方可以直接导入并使用这些方法，而无需每次都通过 Hook 获取。
 * 例如: message.success('操作成功');
 */
const AntdGlobal = () => {
    // 获取当前应用的全局静态方法实例
    const staticFunction = App.useApp();
    // 将静态方法赋值给对应的变量
    message = staticFunction.message;
    modal = staticFunction.modal;
    notification = staticFunction.notification;
    // 返回 null，因为该组件不需要渲染任何内容
    return null;
};

// eslint-disable-next-line react-refresh/only-export-components
export { message, notification, modal };

/**
 * 只需在应用的入口处渲染一次 AntdGlobal 组件，就能在项目的其他任何地方直接导入并使用 message、notification 和 modal，无需每次都通过 Hook 获取。
 * 也可在非 React 组件中直接使用这些方法，例如在请求拦截器或其他工具函数中，例如request.ts中引入使用。
 * 提升了代码的可维护性和复用性，适合需要频繁调用全局提示或弹窗的中大型 React 项目。
 */
export default AntdGlobal;
